from comite import Comite, db_session
from sqlalchemy import exc
from flask import flash
session = db_session()

class ComiteManager(object):
    """Clase encargada del manejo de comites"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<Comite Manager>'
    
    def guardarComite(self, comite):
        """
        Metodo encargado de almacenar un comite en la base de datos
        @param comite: Objeto comite que se desea guardar.
        """
        session.add(comite)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            return flash("El comite ya existe", "error")
        else:
            return flash("Comite registrado exitosamente")
#        session.close()
        
    def eliminarComite(self, idcomite):
        """
        Metodo encargado de eliminar un comite de la base de datos
        @param idcomite: id del comite que se desea eliminar.
        """
#        session = db_session()
        comite = session.query(Comite).filter(Comite.idcomite==idcomite).first()
        session.delete(comite)
        session.commit()
        
    def getComite(self, idcomite):
        """
        Metodo encargado de retornar un comite dado su idcomite
        @param idcomite: id del comite que se desea obtener.
        """
        comite = session.query(Comite).filter(Comite.idcomite==idcomite).first()
        return comite
    
    def getComites(self):
        """Metodo encargado de retornar los comites de la base de datos"""
        comites = session.query(Comite)
        return comites
    
    def getComiteFiltradoPorNombre(self, nombre):
        """
        Metodo encargado de retornar un comite dado su nombre
        @param nombre: nombre del comite que se desea obtener.
        """
        if nombre == "":
            nombre = "%"
        else:
            nombre = "%"+nombre+"%"
        comite = session.query(Comite).filter(Comite.nombre.like(nombre))
        return comite
    
    def getComitePorNombre(self, nombre):
        """
        Metodo encargado de retornar un comite dado su nombre
        @param nombre: nombre del comite que se desea obtener.
        """
        comite = session.query(Comite).filter(Comite.nombre==nombre).first()
        return comite


                    
